<?php
	class mytag{
		public $tag = array(
					'pagelist'=>array('block'=>0),
					'youyan'=>array('block'=>0),
					'links'=>array('block'=>1),
					'field'=>array('block'=>1),
					'newest'=>array('block'=>1),
					'prenext'=>array('block'=>0),
					'split'=>array('block'=>0),
				);
		/**
		 * 用于获取全站最新的文章(addtime)/随机(rand)/评论最多(commets)/修改时间(updatetime)
		 * 可以设置模型根据模型来查询文章
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string
		 * row 要取出的文章条数  默认为20 
		 * cid 要取出文章的栏目   多个栏目用英文逗号隔开 如 1,2,3,4
		 * 	         如果要取出区间，请直接使用 1-5 这样的形式 不要再使用上面的形式了,同时1-5可以写成5-1
		 * titlelen 显示文章标题的最长长度
		 * order 显示排序 默认按照文章添加时间升序排列
		 * img  是否只显示有标题缩略图的文章   默认为0表示不限制   1表示只显示有标题缩略图的文章
		 * onlymodel 单模型模式 。值为模型id，其中GET参数的优先级更高     建议：如果是在首页不要使用，在栏目页请设为0
		 */
		public function _newest($attr,$content){
			//是否使用单模型模式 并且获取模型id
			if(isset($attr['onlymodel'])){
				$mid  = isset($_GET['mid'])&& !empty($_GET['mid']) ?$_GET['mid']:(isset($attr['onlymodel']) && !empty($attr['onlymodel'])?$attr['onlymodel']:0); //模型ID
			}else{
				$mid = 0;
			}
			$limit = isset($attr['row'])?$attr['row']:20; // 显示条数
			$titlelen = isset($attr['titlelen'])?$attr['titlelen']:20;
			$order = isset($attr['order'])?$attr['order']:' order by addtime desc'; //默认按照文章添加时间的顺序来排列
			$img = isset($attr['img'])?$attr['img']:0; //是否只显示有图片的文章?
			//根据栏目id选文章
			$cid = isset($attr['cid'])?$attr['cid']:(isset($_GET['catid']) ?$_GET['catid']:false);//获得栏目的ID
			if($cid){
				if(strpos($cid, '-')){
					$cid_arr = explode('-', $cid);
					$min = min($cid_arr[0],$cid_arr[1]);
					$max = max($cid_arr[0],$cid_arr[1]);
					for($i = $min;$i<=$max;$i++){
						$cid_true[] = $i;
					}
					$cid = implode(',', $cid_true);
				}
			}else{
				$cid = '';
			}
			if(empty($cid)){
				$check_cid = 0;
			}else{
				$check_cid = 1;
			}
			$php = '<?php
					$prefix = C("DB_PREFIX");//表前缀
					$orderArr = array( //排序条件
						"comments",
						"addtime",
						"rand",
						"updatetime",
					);
			if(isset($_GET["order"]) && in_array($_GET["order"],$orderArr)){
				if($_GET["order"] == "rand"){
					$order = "";
				}else{
					$order = " order by ".$_GET["order"]. " desc ";
				}
			}else{
				$order = "'.$order.'";
			}';
			$php .= '$mid = '.$mid.';
					if($mid){ //判断是否采用单模型调用文章
				$mid = $mid?$mid:$_GET["mid"]; //判定模型ID来源
				$where_catid = isset($cid)?$prefix."category.catid in (".$cid.") ":(isset($_GET["catid"])?$prefix."category.catid in (".$_GET["catid"].") ":"");  //判定栏目ID来源
				$model =  M("model");
				$self_model = $model->find($mid);
				$ptable = $self_model["ptable"]; //主表，无前缀
				$stable = $self_model["stable"]; //附表，无前缀
				$news = V($ptable);
				$news->view = array(
						"category"=>array(
								"join_type"=>"inner",
								"on"=>$ptable.".catid = category.catid",
							),
					);
				$count = $news->where($where_catid)->count();
				$page = new page($count,'.$limit.');
				$row = $news->where($where_catid)->limit($page->limit())->all();
				
			}else{';
			$php .= ' $model = M(\'model\');';
			$php .= '$models = $model->all();
			foreach ($models as $k=>$v){
				$tables[] = $v["ptable"];
			}
			$sql = "";';
			$php .= 'foreach($tables as $k=>$v){
					if('.$check_cid.'){
				$where_cid = " where ".$prefix.$v.".catid in ('.$cid.')  and recycled = 0 and status = 1 ";
			}else{
				$where_cid = " where recycled = 0 and status = 1 ";
			}
				if($k == count($tables) - 1){
					$sql .= " select ".$prefix.$v.".title,id,".$prefix.$v.".catid,addtime,mid,click,status,title,uid,updatetime,thumb,comments,".$prefix.$v.".keywords,description from ".$prefix.$v.
						" inner join ".$prefix."category on ".$prefix.$v.".catid = ".$prefix."category.catid ".$where_cid.$order . "";
				}else{
					$sql .= " select ".$prefix.$v.".title,id,".$prefix.$v.".catid,addtime,mid,click,status,title,uid,updatetime,thumb,comments,".$prefix.$v.".keywords,description from ".$prefix.$v.
						" inner join ".$prefix."category on ".$prefix.$v.".catid = ".$prefix."category.catid ".$where_cid." union";
				}
			}';	
			$php .= '$row = $model->query($sql);';
			$php .= '$count = count($row);';
			$php .= '$page = new page($count,'.$limit.');';
			$php .= '$limit  = $page->limit();';
			$php .= '$row = $model->query($sql." limit ".$limit["limit"]);}';
			$php .= '$news_row = array();//存放数据的空数组
					if('.$img.'){
						foreach($row as $k=>$v){
							if(!empty($row["thumb"])){
								$news_row[] = $row[$k];
							}
						}
					}else{$news_row = $row;}';
			$php .= 'if(empty($news_row)){
						$news_row = array();
					}';
			$php .= 'foreach($news_row as $k=>$field):
				$field["title"] = mb_substr($field["title"],0,'.$titlelen.',"utf8");
				$field["htmlurl"] = "<a href=\''.__WEB__.'/index/index/article/nid/".$field[\'id\']."/catid/".$field["catid"]."/mid/".$field["mid"]."\'>".$field[\'title\']."</a>";  ?>';
			$php .= $content;
			$php .= '<?php endforeach; ?>';
			return $php;
		}
		/**
		 * 文章显示分页
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string
		 * 当文章的总的条目数>每页要显示的文章数的时候，才会显示分页
		 */
		public function _pagelist($attr,$content){
			$style = isset($attr['style'])?$attr['style']:1;
			return '<?php echo $page->show('.$style.'); ?>';
		}
		/**
		 * 社会化评论 有言 
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string
		 * cid 有言id 必填
		 */
		public function _youyan($attr,$content){
			if(empty($attr['uid'])){ //显示的条数
				error('youyan标签必须有uid属性!');
			}
			$uid = $attr['uid'];
			$php = '';
			$php .= '<!-- UY BEGIN -->
			<div id="uyan_frame"></div>
			<script type="text/javascript" id="UYScript" src="http://v1.uyan.cc/js/iframe.js?UYUserId='.$uid.'" async=""></script>
			<!-- UY END -->';
			return $php;
		}
		/**
		 * 友情链接标签
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string
		 * row 显示的条数
		 * img 默认为0表示不限制有没有图片  1 表示 只显示有图片的链接  2表示只显示没有图片的链接
		 */
		public function _links($attr,$content){
			$limit = isset($attr['row']) && !empty($attr['row'])?$attr['row']:''; //限制条数
			$img = isset($attr['img']) && !empty($attr['img'])?$attr['img']:0;
			$php = '';
			$php .= '<?php $db = M(\'flink\'); ';
			$php .= '$row = $db->where("stat = 1")->
					order("sort asc")->
					all();
			$links_img = array();
			$links_noimg = array();
			foreach($row as $k=>$v){
				if(!empty($v["logo"])){
					$links_img[] = $row[$k];
				}else{
					$links_noimg = $row[$k];
				}
			}
			if('.$img.' == 1){
				$links = $links_img;
			}elseif('.$img.' == 2){
				$links = $links_noimg;
			}elseif('.$img.' == 0){
				$links = $row;
			}
			foreach($links as $field):
				$field["linkurl"] = "<a href=\'http://".$field["url"]."\' target=\'_blank\'>".$field["fname"]."</a>"; ?>';
			$php .= $content;
			$php .='<?php endforeach; ?>';
			return $php;
		}
		/**
		 * 用于在后台模型中增加自定义字段显示视图
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string
		 */
		public function _field($attr,$content){
			$mid = isset($attr['mid']) ? $attr['mid'] : isset($_GET['mid']) ? $_GET['mid'] : false;
			if ($mid === false) {
				error("fields缺少mid参数");
			}
			$str = '';
			$str.='<?php $fieldArr = field::get_all(' . $mid . ');'; //获得所有字段
			$str.='foreach ($fieldArr as $k=>$v) :';
			$str.='$v["fieldset"]["value"] = isset($news_info[$v["fname"]]) ?
            $news_info[$v["fname"]] : $v["fieldset"]["value"];';
			$str.='$news_info["title"] = $v["title"];';
			$str.='$news_info["description"]=$v["description"];';
			$str.='$news_info["html"] = field::field_html($v);?>';
			$str.=$content;
			$str.='<?php endforeach;?>';
			return $str;
		}
		/**
		 * 用于在文章页面显示上一页下一页
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string  html代码
		 * 在文章页面有个前提：在$_GET 中有mid nid catid 这三个值，这里直接取出来即可
		 */
		public function _prenext($attr,$content){
			$php = "";
			$php .='<?php
					$mid = $_GET["mid"];
			$nid = $_GET["nid"];
			$catid = $_GET["catid"];
			$model = M("model");
			$model = $model->find($mid);
			$ptable = $model["ptable"]; //主表 无前缀
			$news = M($ptable);
			$pre = $news->where(" id < ".$nid)->where(" recycled = 0")->where(" status = 1")->where(" catid = ".$catid)->order("addtime desc")->find();
			$next = $news->where(" id > ".$nid)->where(" recycled = 0")->where(" status = 1")->where(" catid = ".$catid)->find();
				if(empty($pre)){
					$prehtml = "没有了";
				}else{
					$prehtml = "<a href=\'__WEB__/index/index/article/mid/".$mid."/nid/".$pre["id"]."/catid/".$pre["catid"]."\'>".$pre["title"]."</a>";
				}
				if(empty($next)){
					$nexthtml = "没有了";
				}else{
					$nexthtml = "<a href=\'__WEB__/index/index/article/mid/".$mid."/nid/".$next["id"]."/catid/".$next["catid"]."\'>".$next["title"]."</a>";
				} ?>';
			$php .= $content;
			return $php;
		}
		/**
		 * 用于在前台显示面包屑导航
		 * @param array $attr  自动加载进来的 标签的参数  自动获取
		 * @param string $content  标签中的内容  自动获取
		 * @return string  html代码
		 */
		public function _split($attr,$content){
			$php = '';
			$php .= '<?php $mid = isset($_GET["mid"]) && !empty($_GET["mid"]) ?$_GET["mid"]:false; //模型id
			$nid = isset($_GET["nid"]) && !empty($_GET["nid"]) ?$_GET["nid"]:false; //文章id
			$catid = isset($_GET["catid"]) && !empty($_GET["catid"]) ?$_GET["catid"]:false; //栏目id
			$cat = M("category");
	    	$cats = $cat->all();
	    	foreach($cats as $k=>$v){ //获取当前栏目的信息
	    		if($v["catid"] == $catid){
	    			$self_cat = $cats[$k]; //当前栏目信息
	    		}
	    	}
	    	$self_pid = $self_cat["pid"];
	    	$slef_cat = ArrToCat($cats, $self_pid);
	    	$self_cats = channleToArr($slef_cat);
	    	$htmls  = catArr2html($self_cats);
			$index = "<a href=\''.__WEB__.'\'>首页</a>";
			if($nid){ //说明是在文章页面 那么$mid 和$catid 也都会存在
				if(!$mid || !$catid){
					echo "<script>location.href = \''.__WEB__.'\';</script>";
				}else{
					//控制器发送到页面的数组是new  所以这里可以直接拿过来
					$html =$index.$htmls. "><a href=\''.__WEB__.'/index/index/catlist/catid/".$catid."\'>".$new["cname"]."</a>><a href=\"#\">".$new["title"]."</a>";
				}
			}elseif($catid && !$nid){
				$html = $index.$htmls."><a href=\''.__WEB__.'/index/index/catlist/catid/".$catid."\'>".$self_cat["cname"]."</a>";
			}else{
				$html = "";
			} 
			echo $html;?> ';
			
			return $php;
			
		}
	}

	
	
	
	
?>